<?php  if ( ! defined('BASE_PATH')) exit('No direct script access allowed');
/////////////////////////////////////////////////////////////////////////////
//
// SuperPHP - 快速的中文PHP框架
//
// @package		SuperPHP
// @author		hmw@superphp.org
// @copyright	Copyright (c) 2010, SuperPHP.ORG
// @license		http://www.superphp.org/user_guide/license.html
// @link		http://www.superphp.org
// @since		Version 1.0
//
// 许可协议请查看 http://www.SuperPHP.org/
//
/////////////////////////////////////////////////////////////////////////////

class Super_Cache {

    /**
     * 数据缓存策略
     * 有四个可选值：
     *  none:不缓存，默认值
     *  file:文件缓存，即某方法执行后的数据结果整体缓存
     *  html:静态缓存，即生成静态html
     *  custom:自定义，自定义缓存数据
     * @var <type>
     */
    protected $cache_tactic = 'none';

    //缓存文件目录
    protected $cache_path   = 'tmp/cache';

    //文件缓存存放地址
    protected $file_path    = 'file';

    //静态生成地址
    protected $html_path    = 'html';

    //自定义缓存数据存放地址
    protected $custom_path  = 'custom';

    /**
     * 缓存过期时间
     * 如果开启了缓存，即使数据没有更新，系统也会自动更新缓存
     * 单位为秒/s
     */
    protected $cache_expire = '3600';

    /**
     * 构造函数，参数的初始化
     * @param <array> $configs
     */
    public function  __construct($configs=array()) {
        if(is_array($configs) && !empty($configs)){
            foreach($configs as $key=>$val){
                $this->$key = $val;
            }
        }
        $this->_init();
    }

    private function _init(){
        $tmp = $this->cache_tactic.'_path';
        $path = $this->$tmp;
        $this->cache_path .= '/'.$path;
        if(!is_dir($this->cache_path)) __mkdirs($this->cache_path,'0777');
    }

    public function read($cache){
        if($this->cache_tactic == 'none') return FALSE;
        $file = $this->cache_path.'/'.$cache;
        if(file_exists($file)){
            //如果缓存文件已经过期，直接删除之
            if((time() - filemtime($file)) > $this->cache_expire){
                @unlink($file);
                return FALSE;
            }
            return unserialize(read_file($file));
        }
        return FALSE;
    }

    public function write($file,$content){
        if($content && !is_string($content)) $content = serialize($content);
        if($this->cache_tactic == 'none') return FALSE;
        write_file($this->cache_path.'/'.$file, $content);
    }

    public function set_data_cache($db=null,$table=null,$sql=null){
        if($sql == null) return;
        if($db == null) $db = $GLOBALS['SUPER']['db']['database'];
        $data_path = $this->data_path.'/'.$db.'/'.$table;
        $this->check_path($data_path);
        $data_file = md5($sql);
        write_file($data_path.'/'.$data_file, $content);
    }

    public function set_file_cache($module,$controller,$action){
        //
    }

    public function set_html_cache($file){
        //
    }

    /**
     * 获取缓存策略
     */
    public function get_cache_tactic(){
        return $this->cache_tactic;
    }

    /**
     * 设置缓存策略
     */
    public function set_cache_tactic($tactic){
        $this->cache_tactic = $tactic;
    }

    /**
     * 获取缓存文件的存放路径
     * @return <type>
     */
    public function get_cache_path(){
        if($this->cache_tactic == 'none') return FALSE;
        elseif($this->cache_tactic == 'data') return $this->data_path;
        elseif($this->cache_tactic == 'file') return $this->file_path;
        elseif($this->cache_tactic == 'html') return $this->html_path;
        return FALSE;
    }

    /**
     * 设置缓存文件的存放路径
     * @param <type> $path
     * @return <type>
     */
    public function set_cache_path($path){
        if($this->cache_tactic == 'none') return FALSE;
        $p = '_'.$this->cache_tactic.'_path';
        if(property_exists(__CLASS__, $p)){
            $this->$p = $path;
        }
    }

    public function check_path($path){
        if(!file_exists($path)){
            __mkdirs($path);
        }
    }


}
